package com.bjpowernode.crm.workbench.service;

import com.bjpowernode.crm.commons.domain.ReturnObject;
import com.bjpowernode.crm.workbench.domain.Activity;
import com.bjpowernode.crm.workbench.dto.ActivityQueryDto;
import com.bjpowernode.crm.workbench.vo.ActivityQueryVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 处理市场活动相关业务
 *
 * @author 刘逸晖
 */
public interface ActivityService {

    /**
     * 添加市场活动
     *
     * @param activity 预保存的市场活动
     * @param session  Http 会话
     * @return 保存结果
     */
    ReturnObject addActivity(Activity activity, HttpSession session);

    /**
     * 按条件分页查询市场活动
     *
     * @param activityQueryDto 条件
     * @return 市场活动列表
     */
    ActivityQueryVo queryActivitiesByConditionsForPage(ActivityQueryDto activityQueryDto);

    /**
     * 按条件查询市场活动数
     *
     * @param activityQueryDto 条件
     * @return 市场活动数
     */
    int queryCountOfActivitiesByConditions(ActivityQueryDto activityQueryDto);

    /**
     * 根据 id 批量删除市场活动
     *
     * @param ids id 列表
     */
    void removeActivitiesByIds(String[] ids);

    /**
     * 根据 id 查询市场活动
     *
     * @param id id
     * @return 市场活动
     */
    Activity queryActivityById(String id);

    /**
     * 根据 id 编辑市场活动
     *
     * @param activity 市场活动的 id 极其新数据
     * @param session  http 会话
     * @return 编辑结果
     */
    ReturnObject editActivityById(Activity activity, HttpSession session);

    /**
     * 根据线索 id 查市场活动列表
     *
     * @param clueId 线索的 id
     * @return 市场活动列表
     */
    List<Activity> queryActivityByClueId(@Param("clueId") String clueId);

    /**
     * 查询市场活动，根据 id 排除不需要的市场活动
     *
     * @param idsOfExcludedActivities 不需要的市场活动
     * @param name                    名称关键词，可为空
     * @return 市场活动列表
     */
    List<Activity> queryActivitiesByIdsOfExclusions(List<String> idsOfExcludedActivities, String name);

    /**
     * 根据 id 查名称
     *
     * @param id 市场活动的 id
     * @return 市场活动的名称
     */
    String queryNameById(String id);

    /**
     * 根据 id 列表查市场活动列表
     *
     * @param ids id 列表
     * @return 市场活动列表
     */
    List<Activity> queryActivitiesByIds(String[] ids);

    /**
     * 根据 id 列表和名称查市场活动列表
     *
     * @param name 名称
     * @param ids  id 列表
     * @return 市场活动列表
     */
    List<Activity> queryActivitiesByIdsAndName(String name, List<String> ids);

}
